// SHARP HD37331 (ELSI MATE EL-201)
// Pin
// 1	group 1
// 2	group 2
// 3	group 3
// 4	
// 5
// 6
// 7
// 8
// 9
// 10
// 11
// 12
// 13
// 14
// 15


// Keyboard layout
// 	1	2	3	4	5
// --------------------------------------------------------
// 1	4,1	15,1	11,1	10,2	5,3
// 	7	8	9	div	C/CE
// 2	10,1	9,1	7,1	8,2	10,3
// 	4	5	6	mult	T
// 3	14,1	13,1	8,1	6,2	7,2
// 	1	2	3	-	sqrt	
// 4	13,3	12,3	9,2	5,2	4,2	
// 	0	.	%	+	=

int p1=21;
int p2=22;
int p3=23;
int p4=24; // 1,=
int p5=25; // +,C/CE
int p6=26; // -
int p7=27; // sqrt,6
int p8=28; // 3,mult
int p9=29; // 5,%
int p10=30; // 4,T,div
int p11=31; // 9
int p12=32; // .,
int p13=33; // 0,2
int p14=34; // 1
int p15=35; // 8

//------------------------
void setup() {       
  pinMode(p1, OUTPUT);  
  pinMode(p2, OUTPUT);           
  pinMode(p3, OUTPUT);  
  pinMode(p4, INPUT);  
  pinMode(p5, INPUT);  
  pinMode(p6, INPUT);   
  pinMode(p7, INPUT);  
  pinMode(p8, INPUT);  
  pinMode(p9, INPUT); 
  pinMode(p10, INPUT);  
  pinMode(p11, INPUT);  
  pinMode(p12, INPUT);  
  pinMode(p13, INPUT); 
  pinMode(p14, INPUT);  
  pinMode(p15, INPUT);  
  Serial.begin(9600);
}
//------------------------
void digit(int n)
{
  //Serial.print("digit:");Serial.println(n);
  int x,y;
  if(n==0){x=p13; y=p3;}
  if(n==1){x=p14; y=p1;}
  if(n==2){x=p13; y=p1;}
  if(n==3){x=p8;  y=p1;}
  if(n==4){x=p10; y=p1;}
  if(n==5){x=p9;  y=p1;}
  if(n==6){x=p7;  y=p1;}
  if(n==7){x=p4;  y=p1;}
  if(n==8){x=p15; y=p1;}
  if(n==9){x=p11; y=p1;}

  if(n==99){x=p5; y=p3;} // CLEAR
  if(n==98){x=p4; y=p2;} // =
  if(n==97){x=p5; y=p2;} // +  
  if(n==96){x=p6; y=p2;} // -  
  if(n==95){x=p7; y=p2;} // SQRT
  if(n==94){x=p12;y=p3;} // .
  if(n==93){x=p8; y=p2;} // mult
  if(n==92){x=p10;y=p2;} // div

  //delay(100);

  int first = 0;
  for(int k=0;k<8000;k++)
  {
   int v = digitalRead(x);
   if(v == HIGH)
   {
    if(first==2)digitalWrite(y, HIGH);  
    first = 1;
   } 
   else   
   {   
    if(first==2)digitalWrite(y, LOW); 
    if(first==1)first = 2;
   }
  }  
  digitalWrite(y, LOW);
  //delay(100);
}

//------------------------
void sendDigit(char x)
{
 if(x=='0')digit(0);
 if(x=='1')digit(1);
 if(x=='2')digit(2);
 if(x=='3')digit(3);
 if(x=='4')digit(4);
 if(x=='5')digit(5);
 if(x=='6')digit(6);
 if(x=='7')digit(7); 
 if(x=='8')digit(8);
 if(x=='9')digit(9);
 if(x=='.')digit(94);
}
//------------------------
void dispNumberS(String ss)
{
  int i=0;
  char x;
  char number[50];
  
  ss.toCharArray(number,10);
  x = number[0];
  while(x != '\0')
  {
    x = number[i];
    sendDigit(x); 
    i++;
  }
}
//------------------------
void dispNumber(double number)
{
    double temp,work;
    double  ten = 1000000000.;
    work = number;
    int iz = 0,con = 0;
    while(con == 0)
    {
       temp = floor(work/ten);
       Serial.print(work);Serial.print(", ten:");Serial.print(ten);Serial.print(", temp:");Serial.println(temp);
       if(temp!=0 || iz==1){iz=1;digit(temp);}
       work = work - temp*ten;
       if(ten == 1)digit(94);
       if(work== 0.00){con = 1;Serial.print(", stop:");Serial.println(work);}
       ten = ten/10.;
   }   
}

//------------------------
//------------------------
void loop() {
   digit(99);  //CLEAR

   int res = analogRead(A0);
   Serial.print("ser:");Serial.println(res);
   String sss = String(res);
   dispNumberS(sss);
   delay(1000);
   
      digit(99);  //CLEAR
   
   String sss2 = String("123.46");
   dispNumberS(sss2);
   delay(1000);
}
